// mysignal.cc
#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
using namespace std;

int main()
{
    int a = 10;
    int b = 0;

    a /= b;
    cout << "a: " << a << endl;
    
    return 0;
}

// int main()
// {
//     pid_t id = fork();
//     if (id == 0)
//     {
//         // child
//         int cnt = 500;
//         while (cnt--)
//         {
//             cout << "chile process, pid: " << getpid() << " cnt: " << cnt << endl;
//             sleep(1);
//         }
//         exit(0);
//     }

//     // father
//     int status = 0;
//     pid_t rid = waitpid(id, &status, 0);
//     if (rid == id)
//     {
//         cout << "child quit info, rid: " << rid << endl
//              << "exit code: " << ((status >> 8) & 0xFF) << endl
//              << "exit signal: " << (status & 0x7F) << endl
//              << "core dump: " << ((status >> 7) & 1) << endl;
//     }
//     return 0;
// }

// void work()
// {
//     cout << "print log..." << endl;
// }

// void handler(int signo)
// {
//     //work();
//     cout << "...get a sig: " << signo << endl;
//     int n = alarm(5);  // 让闹钟每隔5秒响一次，也就是每5秒执行一次handler方法，那么这个handler方法就是一个定时任务
//     cout << "剩余时间：" << n << endl;
//     // exit(1);
// }

// int main()
// {
//     signal(SIGALRM, handler);  // 14号

//     int n = alarm(50);
//     cout << "第一次设置的返回值：" << n << endl;

//     while (1)
//     {
//         cout << "proc is running..., pid: " << getpid() << endl;
//         sleep(1);
//     }
// }

// int main()
// {
//     // // signal(SIGFPE, handler);  // 8号信号
//     // // signal(SIGSEGV, handler);  // 11号信号，段错误，也就是野指针问题，最常出现的错误

//     cout << "before" << endl;
//     sleep(1);

//     char buffer[1024];
//     int n = 1024;
//     n = read(4, buffer, n);
//     printf("n = %d\n", n);
//     perror("read");

//     // // 除0错误
//     // int a = 10;
//     // a /= 0;

//     // // 段错误，野指针
//     // int *p = nullptr;
//     // *p = 100;

//     cout << "after" << endl;
//     sleep(1);

//     return 0;
// }